FileMaker 16 の新機能「フィールドレベルの暗号化」
2017年06月23日 12:05 PM
FileMaker 16以前
FileMaker 12プラットフォームでは、オブジェクトフィールドのデータを外部保存する際「データを暗号化するセキュア格納」ができるようになりました。
FileMaker 13プラットフォームでは、「データベースそのものの暗号化」ができるようになりました。
最新のバージョンであるFileMaker 16プラットフォームでは、フィールドの値を暗号化できるようになりました。これにより「パスワード」「マイナンバー」「クレジットカード番号」など機密性の高いデータをフィールド単位で暗号化できるようになりました。
フィールドを暗号化するには、FileMaker 16で追加された新しい関数「CryptEncrypt」「CryptEncryptBase64」を使います。どちらの関数も、テキストまたはオブジェクトを同じ方法(AES-GCM 認証付き暗号化)で暗号化します。
暗号化の結果が、「CryptEncrypt」ではオブジェクトに、「CryptEncryptBase64」ではテキストになるので、暗号化するデータや暗号化した後のデータの利用方法により関数を使い分けるのが良いでしょう。
CryptEncrypt関数
指定されたキーでデータ(テキストまたはオブジェクト)を暗号化してオブジェクトデータを返します。
CryptDecrypt関数
指定されたキーでオブジェクトデータを復号してテキストまたはオブジェクトデータを返します。
CryptEncryptBase64関数
指定されたキーでデータ(テキストまたはオブジェクト)を暗号化して、Base64フォーマットのテキストを返します。
CryptDecryptBase64関数
指定されたキーでBase64エンコードテキストを復号してテキストまたはオブジェクトデータを返します。
実際に関数を使うとどのようになるのか「マイナンバー」を例にして確認してみましょう。
- 「マイナンバー」「暗号化キー」「暗号化data」というフィールドを用意してマイナンバーと、暗号化キーを指定します。暗号化キーは日本語でも構いません。
- 「CryptEncrypt関数」で「暗号化キー」をキーに指定して「マイナンバー」フィールドを暗号化すると、「encrypted.data」というファイルが作成されます。
(キャプチャの例では、マイナンバーをシステム内に保存しないために、暗号化と同時に「マイナンバー」「暗号化キー」フィールドを空にする処理を実行しています。)
以上で暗号化は完了です。
このファイルをエクスポートしてテキストエディタで無理やり開いてみると、意味のわからない文字の羅列であることがわかります。同じマイナンバー、同じキーで暗号化しても、その都度encrypted.data内のテキストは変わっていました。また、encrypted.data内のテキストには、不可視文字も含まれています。
復号も、暗号化同様に簡単です。
正しい「暗号化キー」を指定して「CryptDecrypt関数」を使って復号すると、正しく元の値を得ることができます。(キャプチャは、復号結果です。)
復号時、暗号化のキーが間違っていると「?」が返されます。
同じマイナンバーに対し「CryptEncrypBase64関数」を使うと、図のようなテキストが返されます。これは、暗号化されたマイナンバーがBase64フォーマットのテキストで表示されたものです。
試しに、Base64Decode関数(Base64 フォーマットでエンコードされたテキストからのオブジェクトまたはテキスト内容を返します)でこのデータをデコードしてみたところ、意味をなさないテキストが返されました。
「機密性の高いデータについては暗号化したデータのみを保存し、必要な時だけ復号する」という処理を、この関数を使うと簡単に実現できます。
「マイナンバー」や「クレジットカード番号」ほど機密性が高いものを扱わなくとも、データベースを扱う際のセキュリティの重要性は増すばかりです
(5月30日に全面施行された「改正個人情報保護法」では、保有名簿数による適用除外事業者がなくなりました。この「事業者」には企業だけでなく「同窓会」「自治会」「PTA」などの非営利組織も含まれます)。
この新しい関数が、皆さまがよりセキュアなシステムを構築する上で役に立つと幸いです。